﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Entity;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ThaiHoa.Win.QLSX.Entity;
using ThaiHoa.Win.QLSX.Kho.UTI;
using ThaiHoa.Win.QLSX.DAL;

namespace ThaiHoa.Win.QLSX.Kho.UI
{
    public partial class frmThepLuoiDetail : Form
    {
        #region Fields
        private KhoDBContext db;
        private BindingSource LuoiBS;
        public Guid Id;
        Access acs;
        public event EventHandler DBChanged;
        #endregion
        #region Constructor
        public frmThepLuoiDetail()
        {
            InitializeComponent();
        }
        #endregion
        #region Functions
        private void KhoiTao()
        {
            acs = new Access();
            db = new KhoDBContext();
            LuoiBS = new BindingSource();
            db.Luoi.Include("LoaiLuoi").Include("LoaiVatTu").Where(m => m.TrangThai).Load();
            LuoiBS.DataSource = db.Luoi.Local.ToBindingList();
            LuoiBS.AddingNew += new AddingNewEventHandler(LuoiBS_AddingNew);
            //Binding cho binding navigator
            //Binding cho combo
            //combo mác vật tư
            List<MacVatTu> listMacVatTu;
            listMacVatTu = db.MacVatTu.Where(l => l.TrangThai && l.LoaiVatTu.TenLoai.Equals("Thép Lưới")).ToList();
            cbLoaiLuoi.DataSource = listMacVatTu;//set datasource cho combo
            cbLoaiLuoi.DataBindings.Add("SelectedItem", LuoiBS, "LoaiLuoi", true);//binding
            //combo đơn vị tính
            List<DonViTinh> listDonViTinh;
            listDonViTinh = db.DonViTinh.Where(l => l.TrangThai).ToList();
            cbDonViTinh.DataSource = listDonViTinh;//set datasource cho combo
            cbDonViTinh.DataBindings.Add("SelectedItem", LuoiBS, "DonViTinh", true);//binding
            //Binding cho textbox
            txtMa.DataBindings.Add("Text", LuoiBS, "MaMatHang");
            txtTen.DataBindings.Add("Text", LuoiBS, "TenMatHang");
            txtKichThuocCuon.DataBindings.Add("Text", LuoiBS, "KichThuocCuonM");
            txtChieuRongDaiCat.DataBindings.Add("Text", LuoiBS, "ChieuRongDaiCat");
            txtSoChiTietPerDaiCat.DataBindings.Add("Text", LuoiBS, "SoChiTietPerDaiCat");
            txtSoDaiCat.DataBindings.Add("Text", LuoiBS, "SoDaiCat");
            txtSoChiTietPerCuon.DataBindings.Add("Text", LuoiBS, "SoChiTietPerCuon");
            txtSoChiTietThucTePerCuon.DataBindings.Add("Text", LuoiBS, "SoChiTietThucTePerCuon");
            txtTyLeNG.DataBindings.Add("Text", LuoiBS, "TyLeNG");
            //Xử lý 2 trường hợp cụ thế :
            //Thêm mới và xem chi tiết
            if (Id != Guid.Empty)// Truong hop xem chi tiet
            {
                //Tìm vị trí của object có Id tương ứng
                int pos = -1;
                //pos = LuoiBS.Find("MaMatHang","dfi");
                Luoi item = db.Luoi.FirstOrDefault(m => m.Id.Equals(Id));
                if (item == null) return;
                pos = LuoiBS.List.IndexOf(item);
                if (pos < 0)
                    return;
                LuoiBS.Position = pos;
                this.Text = txtTen.Text;
            }
            else // Truong hop them moi
            {
                LuoiBS.AddNew();
                this.Text = "New Item";
            }
        }


        /// <summary>
        /// Kiểm tra hợp lệ dữ liệu
        /// True: hợp lệ
        /// False :chưa hợp lệ
        /// </summary>
        /// <returns></returns>
        private bool KiemTraHopLeDuLieu()
        {
            bool result = true;
            errP.Clear();
            //Kiểm tra loại lưới
            if (cbLoaiLuoi.SelectedItem == null)
            {
                errP.SetError(cbLoaiLuoi, "Loại lưới không được rỗng");
                result = false;
            }
            //Kiểm tra đơn vị tính
            if (cbDonViTinh.SelectedItem == null)
            {
                errP.SetError(cbDonViTinh, "Đơn Vị Tính không hợp lệ");
                result = false;
            }
            //Kiểm tra mã
            if (txtMa.Text == "")
            {
                errP.SetError(txtMa, "Mã không được rỗng");
                result = false;
            }
            //Kiểm tra trùng mã
            //Lấy ra object hiện tại
            Luoi Luoi = LuoiBS.Current as Luoi;
            bool IsAddNew;
            if (Luoi == null)
            {
                IsAddNew = true;
            }
            else
            {
                IsAddNew = !db.Luoi.Any(m => m.Id.Equals(Luoi.Id));
            }
            if (IsAddNew)
            {
                if (db.MatHang.Any(m => m.MaMatHang.Equals(txtMa.Text)))
                {
                    errP.SetError(txtMa, "Mã này đã được sử dụng");
                    result = false;
                }
            }
            else
            {
                if (db.MatHang.Any(m => m.MaMatHang.Equals(txtMa.Text) && !m.Id.Equals(Luoi.Id)))
                {
                    errP.SetError(txtMa, "Mã này đã được sử dụng");
                    result = false;
                }
            }
            if (txtTen.Text == "")
            {
                errP.SetError(txtTen, "Tên không được rỗng");
                result = false;
            }
            //kiểm tra kích thước cuộn
            //double kichThuocCuon;
            //if (!double.TryParse(txtKichThuocCuon.Text, out kichThuocCuon))
            //{
            //    errP.SetError(txtKichThuocCuon, "Kích thước cuộn không hợp lệ");
            //    result = false;
            //}
            //if (kichThuocCuon < 0)
            //{
            //    errP.SetError(txtKichThuocCuon, "Kích thước cuộn không hợp lệ");
            //    result = false;
            //}
            //kiểm tra chiều rộng dải cắt
            double chieuRongDaiCat;
            if (!double.TryParse(txtChieuRongDaiCat.Text, out chieuRongDaiCat))
            {
                errP.SetError(txtChieuRongDaiCat, "Chiều rộng dải cắt không hợp lệ");
                result = false;
            }
            if (chieuRongDaiCat < 0)
            {
                errP.SetError(txtChieuRongDaiCat, "Chiều rộng dải cắt không hợp lệ");
                result = false;
            }
            //kiểm tra  số chi tiết / dải cắt
            double soChiTietPerDaiCat;
            if (!double.TryParse(txtSoChiTietPerDaiCat.Text, out soChiTietPerDaiCat))
            {
                errP.SetError(txtSoChiTietPerDaiCat, "Số chi tiết / dải cắt không hợp lệ");
                result = false;
            }
            if (soChiTietPerDaiCat < 0)
            {
                errP.SetError(txtSoChiTietPerDaiCat, "Số chi tiết / dải cắt không hợp lệ");
                result = false;
            }
            //kiểm tra số dải cắt
            double soDaiCat;
            if (!double.TryParse(txtSoDaiCat.Text, out soDaiCat))
            {
                errP.SetError(txtSoDaiCat, "số dải cắt không hợp lệ");
                result = false;
            }
            if (soDaiCat < 0)
            {
                errP.SetError(txtSoDaiCat, "số dải cắt không hợp lệ");
                result = false;
            }
            //kiểm tra số chi tiết / cuộn
            double soChiTietPerCuon;
            if (!double.TryParse(txtSoChiTietPerCuon.Text, out soChiTietPerCuon))
            {
                errP.SetError(txtSoChiTietPerCuon, "");
                result = false;
            }
            if (soChiTietPerCuon < 0)
            {
                errP.SetError(txtSoChiTietPerCuon, "");
                result = false;
            }
            //kiểm tra số chi tiết thực tế/ cuộn
            double soChiTietThucTePerCuon;
            if (!double.TryParse(txtSoChiTietThucTePerCuon.Text, out soChiTietThucTePerCuon))
            {
                errP.SetError(txtSoChiTietThucTePerCuon, "");
                result = false;
            }
            if (soChiTietThucTePerCuon < 0)
            {
                errP.SetError(txtSoChiTietThucTePerCuon, "");
                result = false;
            }
            //kiểm tra tỷ lệ
            double tyLeNG;
            if (!double.TryParse(txtTyLeNG.Text, out tyLeNG))
            {
                errP.SetError(txtTyLeNG, "Tỷ lệ NG cây không hợp lệ");
                result = false;
            }
            if (tyLeNG < 0 || tyLeNG > 100)
            {
                errP.SetError(txtTyLeNG, "Tỷ lệ NG không hợp lệ");
                result = false;
            }
            return result;
        }
        private int LuuLai()
        {
            LuoiBS.EndEdit();
            if (!KiemTraHopLeDuLieu()) return -1;
            if (MessageBox.Show("Lưu thay đổi ?", "Lưu Lại", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
            {
                int result = db.SaveChanges();
                if (DBChanged != null)
                {
                    DBChanged(this, EventArgs.Empty);
                }
                return result;
            }
            else
                return 0;
        }
        private void Cancel()
        {
            if (MessageBox.Show("Hủy thay đổi ?", "Lưu Lại", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
            {
                LuoiBS.CancelEdit();
                LuoiBS.ResetCurrentItem();
            }
        }
        private void Xoa()
        {
            if (Id == Guid.Empty)
            {
                this.Close();
                return;
            }
            if (Common.ShowMessengerConfirmDelete() == DialogResult.Yes)
            {
                LuoiBS.RemoveCurrent();
                db.SaveChanges();
                {
                    DBChanged(this, EventArgs.Empty);
                }
                this.Close();
            }
        }
        private void btn_DonViTinh_AddNew_Click(object sender, EventArgs e)
        {
            frmDonViTinhDetail _frmDonViTinhDetail = new frmDonViTinhDetail();
            _frmDonViTinhDetail.DBChanged += new EventHandler(_frmDonViTinhDetail_DBChanged);
            acs.ShowFormDonViTinhDetail(_frmDonViTinhDetail, Guid.Empty);
        }

        void _frmDonViTinhDetail_DBChanged(object sender, EventArgs e)
        {
            List<DonViTinh> listDonViTinh;
            listDonViTinh = db.DonViTinh.Where(l => l.TrangThai).ToList();
            cbDonViTinh.DataSource = listDonViTinh;
            DonViTinh donViTinh = listDonViTinh.OrderByDescending(l => l.NgayTao).FirstOrDefault();
            if (donViTinh != null)
                cbDonViTinh.SelectedItem = donViTinh;
        }
        #endregion


        #region Events
        private void frmLuoiDetail_Load(object sender, EventArgs e)
        {
            KhoiTao();
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            int result = LuuLai();
            if (result >= 0) this.Close();
        }
        private void btnQuit_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void btnCancel_Click(object sender, EventArgs e)
        {
            Cancel();
        }
        private void txtTen_TextChanged(object sender, EventArgs e)
        {
            this.Text = txtTen.Text;
        }
        private void btnAddNew_Click(object sender, EventArgs e)
        {
            acs.ShowFormThepLuoiDetail(Guid.Empty);
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            Xoa();
        }
        void LuoiBS_AddingNew(object sender, AddingNewEventArgs e)
        {
            Luoi Luoi = new Luoi();
            LoaiVatTu loaiVatTu = db.LoaiVatTu.FirstOrDefault(l => l.TenLoai.Equals("Thép Lưới"));
            if (loaiVatTu == null)
            {
                loaiVatTu = new LoaiVatTu();
                loaiVatTu.TenLoai = "Thép Lưới";

            }
            Luoi.LoaiVatTu = loaiVatTu;
            e.NewObject = Luoi;

        }
        private void btnTaoMoi_Click(object sender, EventArgs e)
        {
            frmMacVatTuDetail _frmMacVatTuDetail = new frmMacVatTuDetail();
            _frmMacVatTuDetail.DBChanged += new EventHandler(_frmMacVatTuDetail_DBChanged);
            string tenLoaiVatTu = "Thép Lưới";
            acs.ShowFormMacVatTuDetail(_frmMacVatTuDetail, Guid.Empty, tenLoaiVatTu);
        }

        void _frmMacVatTuDetail_DBChanged(object sender, EventArgs e)
        {
            List<MacVatTu> listMacVatTu;
            listMacVatTu = db.MacVatTu.Where(l => l.TrangThai && l.LoaiVatTu.TenLoai.Equals("Thép Lưới")).ToList();
            cbLoaiLuoi.DataSource = listMacVatTu;//set datasource cho combo
            MacVatTu lastMacVatTu = listMacVatTu.OrderByDescending(l => l.NgayTao).Where(l=>l.LoaiVatTu.TenLoai.Equals("Thép Lưới")).FirstOrDefault();
            cbLoaiLuoi.SelectedItem = lastMacVatTu;
        }
        #endregion










    }
}
